package com.laozhao.dreamframe.sqlmap; 

import java.util.Date;
import java.util.HashMap;
import java.util.List;

/** 
 * @author dozhao 
 * @version create time：Aug 1, 2011 4:03:52 PM 
 * 
 */
public class BaseUpdater {

	/**
	 * sql语句
	 */
	private String command;
	/**
	 * update 内容字段
	 */
	private HashMap<String, Object> updateSet;

	/**
	 * sql条件
	 */
	protected List<Criteria> oredCriteria;

	public BaseUpdater(String command, HashMap<String, Object> map ,List<Criteria> oredCriteria) {
		this.command = command ;
		this.updateSet = map;
		this.oredCriteria = oredCriteria;
	}

	/**
	 * 生成最终sql语句
	 */
	public String toSql() {
		if(updateSet == null || updateSet.isEmpty() ){
			return null;
		}
		
		StringBuffer sqlSel = new StringBuffer();
		if (oredCriteria != null && oredCriteria.size()> 0){
			for (Criteria cri : oredCriteria) {
				if (!cri.isValid())
					continue;
				sqlSel.append(cri.toSql());
			}
		}

		command.replace("$updateset" , getUpdateString());
		command.replace("$where", sqlSel.toString());
		command.replaceAll("$sysdate", new Date().toString());
		
		return command;

	}



	private String getUpdateString() {
		StringBuffer sqlUpdate = new StringBuffer();
		
		for (String key : updateSet.keySet()) {
			sqlUpdate.append(key).append(" = ").append(updateSet.get(key)).append(" , ");
		}
		
		sqlUpdate.append(" 1 = 1 ");
		return sqlUpdate.toString();
	}

//	public List<Criteria> getOredCriteria() {
//		return oredCriteria;
//	}
//
//	/**
//	 * or 条件
//	 */
//	public void or(Criteria criteria) {
//		criteria.setLogic(false);
//		oredCriteria.add(criteria);
//	}
//
//	/**
//	 * or 条件
//	 */
//	public void and(Criteria criteria) {
//		criteria.setLogic(true);
//		oredCriteria.add(criteria);
//	}

	/**
	 * 创建条件对象
	 */
	public Criteria createCriteria(boolean logic) {
		Criteria criteria = new Criteria(logic);
		// if (oredCriteria.size() == 0) {
		oredCriteria.add(criteria);
		// }
		return criteria;
	}


	/**
	 * 清除条件
	 */
	public void clear() {
		oredCriteria.clear();
	}

	String getFieldName(String field) {

		if (field == null) {
			throw new RuntimeException(field + " cannot be null");
		}
		return field.toUpperCase();
	}
	
	// public String getCommand() {
	// return command;
	// }
	//
	// public void setCommand(String command) {
	// this.command = command;
	// }

}
 